function sack(file){
    this.xmlhttp=null;this.resetData=function(){
        this.method="POST";this.queryStringSeparator="?";this.argumentSeparator="&";this.URLString="";this.encodeURIString=true;this.execute=false;this.element=null;this.elementObj=null;this.requestFile=file;this.vars=new Object();this.responseStatus=new Array(2)
        };this.resetFunctions=function(){
        this.onLoading=function(){};this.onLoaded=function(){};this.onInteractive=function(){};this.onCompletion=function(){};this.onError=function(){};this.onFail=function(){}
        };this.reset=function(){
        this.resetFunctions();this.resetData()
        };this.createAJAX=function(){
        try{
            this.xmlhttp=new ActiveXObject("Msxml2.XMLHTTP")
            }catch(e1){
            try{
                this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
                }catch(e2){
                this.xmlhttp=null
                }
            }if(!this.xmlhttp){
            if(typeof XMLHttpRequest!="undefined"){
                this.xmlhttp=new XMLHttpRequest()
                }else{
                this.failed=true
                }
            }
        };this.setVar=function(name,value){
        this.vars[name]=Array(value,false)
        };this.encVar=function(name,value,returnvars){
        if(true==returnvars){
            return Array(encodeURIComponent(name),encodeURIComponent(value))
            }else{
            this.vars[encodeURIComponent(name)]=Array(encodeURIComponent(value),true)
            }
        };this.processURLString=function(string,encode){
        encoded=encodeURIComponent(this.argumentSeparator);regexp=new RegExp(this.argumentSeparator+"|"+encoded);varArray=string.split(regexp);for(i=0;i<varArray.length;i++){
            urlVars=varArray[i].split("=");if(true==encode){
                this.encVar(urlVars[0],urlVars[1])
                }else{
                this.setVar(urlVars[0],urlVars[1])
                }
            }
        };this.createURLString=function(urlstring){
        if(this.encodeURIString&&this.URLString.length){
            this.processURLString(this.URLString,true)
            }if(urlstring){
            if(this.URLString.length){
                this.URLString+=this.argumentSeparator+urlstring
                }else{
                this.URLString=urlstring
                }
            }this.setVar("rndval",new Date().getTime());urlstringtemp=new Array();for(key in this.vars){
            if(false==this.vars[key][1]&&true==this.encodeURIString){
                encoded=this.encVar(key,this.vars[key][0],true);delete this.vars[key];this.vars[encoded[0]]=Array(encoded[1],true);key=encoded[0]
                }urlstringtemp[urlstringtemp.length]=key+"="+this.vars[key][0]
            }if(urlstring){
            this.URLString+=this.argumentSeparator+urlstringtemp.join(this.argumentSeparator)
            }else{
            this.URLString+=urlstringtemp.join(this.argumentSeparator)
            }
        };this.runResponse=function(){
        eval(this.response)
        };this.runAJAX=function(urlstring){
        if(this.failed){
            this.onFail()
            }else{
            this.createURLString(urlstring);if(this.element){
                this.elementObj=document.getElementById(this.element)
                }if(this.xmlhttp){
                var self=this;if(this.method=="GET"){
                    totalurlstring=this.requestFile+this.queryStringSeparator+this.URLString;this.xmlhttp.open(this.method,totalurlstring,true)
                    }else{
                    this.xmlhttp.open(this.method,this.requestFile,true);try{
                        this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")
                        }catch(e){}
                    }this.xmlhttp.onreadystatechange=function(){
                    switch(self.xmlhttp.readyState){
                        case 1:self.onLoading();break;case 2:self.onLoaded();break;case 3:self.onInteractive();break;case 4:self.response=self.xmlhttp.responseText;self.responseXML=self.xmlhttp.responseXML;self.responseStatus[0]=self.xmlhttp.status;self.responseStatus[1]=self.xmlhttp.statusText;if(self.execute){
                            self.runResponse()
                            }if(self.elementObj){
                            elemNodeName=self.elementObj.nodeName;elemNodeName.toLowerCase();if(elemNodeName=="input"||elemNodeName=="select"||elemNodeName=="option"||elemNodeName=="textarea"){
                                self.elementObj.value=self.response
                                }else{
                                self.elementObj.innerHTML=self.response
                                }
                            }if(self.responseStatus[0]=="200"){
                            self.onCompletion()
                            }else{
                            self.onError()
                            }self.URLString="";break
                        }
                    };this.xmlhttp.send(this.URLString)
                }
            }
        };this.reset();this.createAJAX()
    };